package thread;

/**
 * 静态方法锁
 * 当一个静态方法使用synchronized后，那么该方法一定具有同步效果。
 */
public class SyncDemo3 {
    public static void main(String[] args) {
//        new Thread(()->Foo.dosome()).start();
//        new Thread(Foo::dosome).start();

            Foo f1 = new Foo();
            Foo f2 = new Foo();
            new Thread(()->f1.dosome()).start();
            new Thread(()->f2.dosome()).start();
        }
    }

class Foo{
    //public synchronized static void dosome(){
    public static void dosome(){
        /*
            在静态方法中使用同步块时，同步监视器对象还是使用当前类的类对象
            获取类对象的方式: 类名.class
            例如获取Foo的类对象就是:Foo.class
         */
        synchronized(Foo.class) {
            try {
                Thread t = Thread.currentThread();
                System.out.println(t.getName() + "正在执行dosome方法");
                Thread.sleep(5000);
                System.out.println(t.getName() + "执行dosome方法");
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}












